/*
 * Copyright 北京航空航天大学  @ 2015 版权所有
 */
package com.buaa.edu.leetcode.algorithm.linkedlist;

/**
 * <p>
 * 两数相加 
 * Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) 
 * Output: 7 -> 0 -> 8
 * </p>
 * 
 * @author towan
 * @email tongwenzide@163.com
 * @time 2015年6月17日
 */
public class AddTwoNumbers {

    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode it1 = l1;
        ListNode it2 = l2;
        ListNode list = null;
        ListNode tail = null;
        int carry = 0;
        //只有有未处理的节点或者进位不为0，循环迭代
        while(it1!=null || it2!=null || carry!=0){
            int num1 = it1==null?0:it1.val;
            int num2 = it2==null?0:it2.val;
            int sum = num1+num2+carry;
            carry = sum/10;
            sum = sum%10;
            if(list==null){
                //记录新的链头
                list = new ListNode(sum);
                tail = list;
            }else{
                tail.next = new ListNode(sum);
                tail = tail.next;
            }
            //可以使用null代表Null的下一轮迭代
            it1 = it1==null?null:it1.next;
            it2 = it2==null?null:it2.next;
        }
        return list;
    }
}
